]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
bluetooth: Show the Bluetooth switch in more cases
authorBastien Nocera <hadess@hadess.net>
Thu, 15 Sep 2022 16:03:22 +0000 (18:03 +0200)
committerMarge Bot <marge-bot@gnome.org>
Sat, 17 Sep 2022 18:24:15 +0000 (18:24 +0000)
In older versions of GNOME, when a menu was used for Bluetooth devices,
we tried to avoid showing the Bluetooth menu to folks who didn't use
Bluetooth.

This kept causing problems as the menu would disappear if no
devices were setup and the platform "airplane mode" removed the
Bluetooth device from the USB bus, making it impossible to detect
whether a Bluetooth device existed, compared to a user unplugging a
removable Bluetooth device.

Closes: #5749
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2488>

js/ui/status/bluetooth.js

index d4de597ad7e2591c4e29655c5b297cc8ee972a9b..f5ed1775b1c627c7591d87170bd007ad4af3864e 100644 (file)
@@ -64,7 +64,10 @@ const BtClient = GObject.registerClass({
             g_interface_info: rfkillManagerInfo,
         });
         this._proxy.connect('g-properties-changed', (p, properties) => {
-            if ('BluetoothHardwareAirplaneMode' in properties.unpack())
+            const changedProperties = properties.unpack();
+            if ('BluetoothHardwareAirplaneMode' in changedProperties)
+                this.notify('available');
+            else if ('BluetoothHasAirplaneMode' in changedProperties)
                 this.notify('available');
         });
         this._proxy.init_async(GLib.PRIORITY_DEFAULT, null)
@@ -79,21 +82,19 @@ const BtClient = GObject.registerClass({
             this._connectDeviceNotify(deviceStore.get_item(i));
 
         this._client.connect('device-removed', (c, path) => {
-            this._syncHadSetupDevices();
             this._deviceNotifyConnected.delete(path);
             this.emit('devices-changed');
         });
         this._client.connect('device-added', (c, device) => {
-            this._syncHadSetupDevices();
             this._connectDeviceNotify(device);
             this.emit('devices-changed');
         });
     }
 
     get available() {
-        // If there were set up devices, assume there is an adapter
-        // that can be powered on as long as we're not hard blocked
-        return this._hadSetupDevices
+        // If we have an rfkill switch, make sure it's not a hardware
+        // one as we can't get out of it in software
+        return this._proxy.BluetoothHasAirplaneMode
             ? !this._proxy.BluetoothHardwareAirplaneMode
             : this.active;
     }